Módulo 3

Técnicas de Clasificación

Eloy Alvarado Narváez

Universidad Técnica Federico Santa María

Esteban Salgado Valenzuela

Universidad Técnica Federico Santa María

13 de diciembre de 2024

Técnicas de clasificación

Introducción

Como fue expuesto en el módulo anterior, los modelos de regresión lineal asumen que la variable respuesta \(Y\) es cuantitativa. Sin embargo, en muchas situaciones prácticas, la variable en estudio es de tipo cualitativa (también referida como categórica).

Ejemplos:

  1. Una persona llega a la sala de emergencias con un conjunto de síntomas que podrían atribuirse a una de tres condiciones médicas. ¿Cuál de las tres condiciones tiene el individuo?

  2. Un servicio de banca en línea debe ser capaz de determinar si una transacción realizada en el sitio es fraudulenta, en función de la dirección IP del usuario, el historial de transacciones anteriores, entre otros factores.

Introducción

Al igual que en las regresiones, en el contexto de clasificación tenemos un conjunto de observaciones de entrenamiento: \[(x_1, y_1), \dots, (x_n, y_n),\]

que podemos usar para construir un clasificador. Queremos que nuestro clasificador tenga un buen desempeño no sólo en los datos de entrenamiento, sino también en observaciones de prueba que no se utilizaron para entrenar el clasificador.

Ejemplo: Mora en Tarjeta de Crédito

Ejemplo: Mora en Tarjeta de Crédito

¿Podemos usar regresión lineal?

default student balance income
0 No No 729.526495 44361.625074
1 No Yes 817.180407 12106.134700
2 No No 1073.549164 31767.138947

Supongamos que la clasificación de mora la codificamos como:

\[Y= \begin{cases} 0 \quad \text{si} \quad \texttt{default=No} \\ 1 \quad \text{si} \quad \texttt{default=Yes} \end{cases} \]

¿Podríamos realizar una regresión lineal de \(Y\) respecto de \(X\) y clasificar como \(\texttt{Yes}\) si \(\widehat{Y}>0.5\)?

Ejemplo: Mora en Tarjeta de Crédito

¿Podemos usar regresión lineal?

  • En el caso de una respuesta binaria, la regresión lineal es un buen clasificador, y es equivalente a realizar un análisis discriminante lineal

  • Debido a que en la población (de datos), \[\mathbb{E}(Y| X = x)= \mathbb{P}(Y=1 | X=x),\] se podría pensar que la regresión es un modelo ideal para este tipo de tareas.

  • Sin embargo, la regresión lineal podría producir probabilidades fuera del rango \([0,1]\). Así, la regresión logística es un modelo más apropiado.

Ejemplo: Mora en Tarjeta de Crédito

Regresión lineal vs Regresión logística

Regresión logística

Por simplicidad escribamos \(p(X)=\mathbb{P}(Y=1 | X)\) y consideremos la variable balance para predecir si hubo mora (default). El modelo de regresión tiene por forma:

\[p(X)=\dfrac{\exp(\beta_0 + \beta_1 X)}{1+\exp(\beta_0 + \beta_1 X)}\]

Es claro ver, que independiente de los valores de \(\beta_0,\beta_1\) o \(X\), \(p(X)\) tomará valores en el intervalo \([0,1]\). La expresión anterior la podemos reordenar como:

\[\ln\left( \dfrac{p(X)}{1-p(X)}\right)=\beta_0 + \beta_1 X\]

Estimación de los coeficientes de regresión

Los coeficiente \(\beta_0\) y \(\beta_1\) en la ecuación

\[ p(X)=\dfrac{\exp(\beta_0 + \beta_1 X)}{1+\exp(\beta_0 + \beta_1 X)} \]

son desconocidos, por lo que deben ser estimados basándose en los datos de entrenamiento.

Usualmente la metodología de máxima verosimilitud es preferida para el proceso de estimación, debido a que tiene buenas propiedades estadísticas.

Estimación de los coeficientes de regresión: continuación

Formalmente, definimos la función de verosimilitud como:

\[ \ell(\beta_0,\beta_1)=\prod_{i:y_i=1}p(x_i)\prod_{i':y_{i'}=0}(1-p(x_{i'})) \]

Las estimaciones \(\hat{\beta}_0\) y \(\hat{\beta}_1\) son escogidos para maximizar la función de verosimilitud.

Regresión logística en python

import statsmodels.api as sm
Default['default'] = Default['default'].map({'No': 0, 'Yes': 1})
X = Default[['balance']]
X = sm.add_constant(X)  
y = Default['default']
model = sm.Logit(y, X)
result = model.fit()
Optimization terminated successfully.
         Current function value: 0.079823
         Iterations 10

Regresión logística en python

print(result.summary())
                           Logit Regression Results                           
==============================================================================
Dep. Variable:                default   No. Observations:                10000
Model:                          Logit   Df Residuals:                     9998
Method:                           MLE   Df Model:                            1
Date:                Wed, 11 Dec 2024   Pseudo R-squ.:                  0.4534
Time:                        12:10:49   Log-Likelihood:                -798.23
converged:                       True   LL-Null:                       -1460.3
Covariance Type:            nonrobust   LLR p-value:                6.233e-290
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
const        -10.6513      0.361    -29.491      0.000     -11.359      -9.943
balance        0.0055      0.000     24.952      0.000       0.005       0.006
==============================================================================

Possibly complete quasi-separation: A fraction 0.13 of observations can be
perfectly predicted. This might indicate that there is complete
quasi-separation. In this case some parameters will not be identified.

Predicciones

¿Cuál es la probabilidad de mora (default) para alguien que tiene un balance de $1000?

\[ \hat{p}(X)=\dfrac{\exp(-10.6513+ 0.0055 \times 1000)}{1+\exp(-10.6513+ 0.0055 \times 1000)}\approx 0.006 \]

¿Cuál es la probabilidad de mora (default) para alguien que tiene un balance de $2000?

\[ \hat{p}(X)=\dfrac{\exp(-10.6513+ 0.0055 \times 2000)}{1+\exp(-10.6513+ 0.0055 \times 2000)}\approx 0.586 \]

Mora de estudiantes

¿Qué resultados obtenemos si el predictor es student?

Default['student'] = Default['student'].map({'No': 0, 'Yes': 1})
X = Default[['student']]
X = sm.add_constant(X)  
y = Default['default']
model = sm.Logit(y, X)
result = model.fit()
Optimization terminated successfully.
         Current function value: 0.145434
         Iterations 7

Mora de estudiantes

print(result.summary())
                           Logit Regression Results                           
==============================================================================
Dep. Variable:                default   No. Observations:                10000
Model:                          Logit   Df Residuals:                     9998
Method:                           MLE   Df Model:                            1
Date:                Wed, 11 Dec 2024   Pseudo R-squ.:                0.004097
Time:                        12:10:50   Log-Likelihood:                -1454.3
converged:                       True   LL-Null:                       -1460.3
Covariance Type:            nonrobust   LLR p-value:                 0.0005416
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
const         -3.5041      0.071    -49.554      0.000      -3.643      -3.366
student        0.4049      0.115      3.520      0.000       0.179       0.630
==============================================================================

\[ \mathbb{P}\left( \text{default=Yes }| \text{ student=Yes}\right)=\dfrac{\exp(-3.5041+ 0.4049 \times 1)}{1+\exp(-3.5041+ 0.4049 \times 1)}\approx 0.0431 \]

\[ \mathbb{P}\left( \text{default=Yes }| \text{ student=No}\right)=\dfrac{\exp(-3.5041+ 0.4049 \times 0)}{1+\exp(-3.5041+ 0.4049 \times 0)}\approx 0.0292 \]

Regresión logística múltiple

Ahora consideremos el problema de predecir una respuesta binaria usando múltiples predictores. La extensión natural del modelo de regresión es

\[ \log \left(\dfrac{p(X)}{1-p(X)}\right)=\beta_0 + \beta_1 X_1 +\dots + \beta_p X_p \]

donde \(X=(X_1,\dots,X_p)\) son \(p\) predictores. La ecuación anterior la podemos reescribir como

\[ p(X)=\dfrac{\exp(\beta_0 + \beta_1 X_1 +\dots + \beta_p X_p)}{1+ \exp(\beta_0 + \beta_1 X_1 +\dots + \beta_p X_p)} \]

Regresión logística múltiple

X = Default[['student', 'balance', 'income']]
X = sm.add_constant(X)
y = Default['default']
model = sm.Logit(y, X)
result = model.fit()
print(result.summary())
Optimization terminated successfully.
         Current function value: 0.078577
         Iterations 10
                           Logit Regression Results                           
==============================================================================
Dep. Variable:                default   No. Observations:                10000
Model:                          Logit   Df Residuals:                     9996
Method:                           MLE   Df Model:                            3
Date:                Wed, 11 Dec 2024   Pseudo R-squ.:                  0.4619
Time:                        12:10:50   Log-Likelihood:                -785.77
converged:                       True   LL-Null:                       -1460.3
Covariance Type:            nonrobust   LLR p-value:                3.257e-292
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
const        -10.8690      0.492    -22.079      0.000     -11.834      -9.904
student       -0.6468      0.236     -2.738      0.006      -1.110      -0.184
balance        0.0057      0.000     24.737      0.000       0.005       0.006
income      3.033e-06    8.2e-06      0.370      0.712    -1.3e-05    1.91e-05
==============================================================================

Possibly complete quasi-separation: A fraction 0.15 of observations can be
perfectly predicted. This might indicate that there is complete
quasi-separation. In this case some parameters will not be identified.

Análisis discriminante

Introducción

La regresión logística involucra modelar directamente \(\mathbb{P}\left( Y=k|X=x\right)\) usando la función logística dada por

\[ p(X)=\dfrac{\exp(\beta_0 + \beta_1 X_1 +\dots + \beta_p X_p)}{1+ \exp(\beta_0 + \beta_1 X_1 +\dots + \beta_p X_p)} \]

para el caso de dos clases en la variable respuesta. En lo que sigue, consideramos una manera alternativa y menos directa para estimar estas probabilidades.

Análisis discriminante lineal

En esta metodología, modelamos la distribución de los predictores \(X\) por separado en cada una de las categorías de la variable respuesta \((Y)\), y luego usamos el teorema de Bayes para convertir estos resultados en estimaciones de \(\mathbb{P}\left(Y=k|X=x\right)\).

Teorema de Bayes \[\mathbb{P}(Y=k|X=x)=\dfrac{\mathbb{P}(X=x|Y=k)\times \mathbb{P}(Y=k)}{\mathbb{P}(X=x)} \]

Análisis discriminante lineal

Para las metodologías de análisis discriminante, reescribimos el Teorema de Bayes como:

\[\mathbb{P}(Y=k|X=x)=\dfrac{\pi_k f_k(x)}{\sum_{l=1}^{K}\pi_l f_l(x)},\]

donde:

  • \(f_k(x)=\mathbb{P}(X=x|Y=k)\) es la densidad para \(X\) en la clase \(k\).

  • \(\pi_k = \mathbb{P}(Y=k)\) es la probabilidad marginal o apriori para la clase \(k\).

Análisis discriminante lineal

  • La idea general, es no estimar \(p_k(X)\) directamente, sino estimar \(\pi_k\) y \(f_k\) para obtener lo deseado.

  • Usualmente \(\pi_k\) es fácil de obtener si se tiene una muestra aleatoria de \(Y\), pues obtenemos estas estimaciones como las proporciones de cada clase.

  • Estimar \(f_k(X)\) tiende a ser más difícil, a menos que se asuman formas simples para las densidades.

Análisis discriminante lineal con \(p=1\)

Primero asumiremos que \(p=1\), es decir, sólo tenemos un predictor. Deseamos obtener una estimación para \(f_k(x)\) para utilizarlo en la ecuación

\[ \mathbb{P}(Y=k|X=x)=\dfrac{\pi_k f_k(x)}{\sum_{l=1}^{K} \pi_l f_l(x)} \]

y así poder estimar \(p_k(x)\). Para poder estimar \(f_k\) asumiremos que es Gaussiana. Por lo que,

\[ f_k(x)=\dfrac{1}{\sqrt{2\pi}\sigma_k}\exp\left( -\dfrac{1}{2\sigma_{k}^{2}}(x-\mu_k)^2\right) \]

donde \(\mu_k\) y \(\sigma_{k}^{2}\) son la media y la varianza de la clase \(k-\)ésima. Por ahora, asumiremos que \(\sigma_{1}^{2}=\dots=\sigma_{K}^{2}=\sigma^2\)

Análisis discriminante lineal con \(p=1\)

Por lo anterior, se tendrá

\[ \mathbb{P}(Y=k|X) = p_k(x)=\dfrac{\pi_k \dfrac{1}{\sqrt{2\pi}\sigma}\exp\left( -\dfrac{1}{2\sigma^{2}}(x-\mu_k)^2\right)}{\sum_{l=1}^{K}\pi_l\dfrac{1}{\sqrt{2\pi}\sigma}\exp\left( -\dfrac{1}{2\sigma^{2}}(x-\mu_l)^2\right) } \]

El clasificador Bayesiano asigna una observacion \(X=x\) a la clase que su \(p_k(x)\) es más grande. Si arreglamos términos en la expresión anterior, se tiene que el proceso es equivalente a asignar la observación a la clase en la que

\[ \delta_k(x)=x \dfrac{\mu_k}{\sigma^2}-\dfrac{\mu_{k}^{2}}{2\sigma^2}+\log \pi_k \]

es más grande.

Análisis discriminante lineal con \(p=1\)

Por ejemplo, si \(K=2\) Y \(\pi_1=\pi_2\), entonces el clasificador Bayesiano asigna una observación a la clase 1 si: \[2x(\mu_1-\mu_2)>\mu_{1}^{2}-\mu_{2}^{2},\]

y a la clase 2 en caso contrario. En este caso, el límite de decisión de Bayes (Bayes decision boundary) corresponde al punto donde

\[ x=\dfrac{\mu_{1}^{2}-\mu_{2}^{2}}{2(\mu_1-\mu_2)}=\dfrac{\mu_1+\mu_2}{2} \]

Llamamos a este, el punto (o área) en donde la clasificación es ambigua.

Análisis discriminante lineal con \(p=1\)

El análisis discriminante lineal (LDA) aproxima el clasificador bayesiano ingresando las siguientes estimaciones:

\[ \hat{\pi}_k = \dfrac{n_k}{n} \]

\[ \hat{\mu}_k=\dfrac{1}{n_k}\sum_{i:y_i=k}x_i \]

\[ \hat{\sigma}^{2}=\dfrac{1}{n-K}\sum_{k=1}^{K}\sum_{i:y_i=K}(x_i-\hat{\mu}_k)^2 \]

donde \(n\) es el número total de observaciones en el conjunto de entrenamiento, \(n_k\) es el número de observaciones en el conjunto de entrenamiento en la clase \(k-\)ésima.

Análisis discriminante lineal con \(p>1\)

  • Densidad: \(f(x) = \frac{1}{(2\pi)^{p/2} |\Sigma|^{1/2}} e^{-\frac{1}{2} (x - \mu)^T \Sigma^{-1} (x - \mu)}\)

  • Función discriminante: \(\delta_k(x) = x^T \Sigma^{-1} \mu_k - \frac{1}{2} \mu_k^T \Sigma^{-1} \mu_k + \log \pi_k\)

Análisis discriminante lineal con \(p>1\)

Otras formas de análisis discriminante

\[ \mathbb{P}(Y=k|X=x)=\dfrac{\pi_k f_k(x)}{\sum_{l=1}^{K} \pi_l f_l(x)} \]

Cuando \(f_k(x)\) son distribuciones Gaussianas, con la misma matriz de covarianza en cada clase, obtenemos el Análisis Discriminante Lineal (LDA). Si alteramos la forma de \(f_k(x)\), obtendremos diferentes clasificadores:

  • Con distribuciones Gaussianas pero diferentes \(\Sigma_k\) en cada clase, obtendremos el Análisis Discriminante Cuadrático (QDA)

  • Con \(f_k(x)=\prod_{j=1}^{p} f_{jk}(x_j)\) en cada clase obtendremos Naive Bayes

  • Muchas otras formas se pueden obtener al proponer modelos de densidad para \(f_k(x)\).

Análisis discriminante cuadrático

\[ \delta_k(x) = -\frac{1}{2} (x - \mu_k)^T \Sigma_k^{-1} (x - \mu_k) + \log \pi_k - \frac{1}{2} \log |\Sigma_k| \]

Debido a que \(\mathbf{\Sigma_k}\) son diferentes, el término al cuadrado importa.

Naive Bayes

  • Asume que los predictores (\(X\)) son independientes en cada clase.

  • Útil cuando \(p\) es grande, ya que los métodos multivariados como LDA o QDA son ineficientes.

  • Acepta predictores cualitativos y cuantitativos.

  • A pesar de tener muchos supuestos, Naive Bayes usualmente entrega buenas clasificaciones.